package cc.rengu.igas.bomp.common.dao;

import cc.rengu.igas.bomp.common.entity.OrgInfo;
import cc.rengu.oltp.utility.bean.PageInfo;
import cc.rengu.oltp.utility.bean.PageResult;

import java.util.List;

/**
 * 机构信息表操作接口类
 * Created by wangcheng on 2021/7/2 11:08
 */
public interface OrgInfoMapper {
    /**
     * 登记机构信息
     *
     * @param orgInfo 机构信息
     * @return 0-成功，其它-失败
     * @throws Exception 异常
     */
    int insertOrgInfo(OrgInfo orgInfo) throws Exception;

    /**
     * 根据非业务主键更新机构信息
     *
     * @param orgInfo 机构信息
     * @return 0-成功，其它-失败
     * @throws Exception 异常
     */
    int updateOrgInfoById(OrgInfo orgInfo) throws Exception;

    /**
     * 根据业务主键更新机构信息
     *
     * @param orgInfo 机构信息
     * @return 0-成功，其它-失败
     * @throws Exception 异常
     */
    int updateOrgInfoByPrimaryKey(OrgInfo orgInfo) throws Exception;

    /**
     * 根据业务主键查询机构信息
     *
     * @param instId  多法人标识
     * @param orgType 机构类型
     * @param orgCode 机构号
     * @return 机构信息
     * @throws Exception 异常
     */
    OrgInfo selectOrgInfoByPrimaryKey(String instId, String orgType, String orgCode) throws Exception;

    /**
     * 根据机构号或者机构名称模糊查询机构信息
     *
     * @param instId  多法人标识
     * @param orgType 机构类型
     * @param orgCode 机构号
     * @param orgName 机构名称
     * @return 机构信息
     * @throws Exception 异常
     */
    List<OrgInfo> selectOrgInfoByOrgCodeOrOrgName(String instId, String orgType, String orgCode, String orgName) throws Exception;

    /**
     * 根据机构号或者机构名称模糊分页查询机构信息
     *
     * @param instId   多法人标识
     * @param orgType  机构类型
     * @param orgCode  机构号
     * @param orgName  机构名称
     * @param pageInfo 分页信息
     * @return 机构信息
     * @throws Exception 异常
     */
    PageResult selectOrgInfoByOrgCodeOrOrgName(String instId, String orgType, String orgCode, String orgName, PageInfo pageInfo) throws Exception;


    /**
     * 根据机构号递归查询当前机构及下属机构信息
     *
     * @param instId  多法人标识
     * @param orgType 机构类型
     * @param orgCode 机构号
     * @return 机构信息
     * @throws Exception 异常
     */
    List<OrgInfo> recursionQueryByOrgCode(String instId, String orgType, String orgCode) throws Exception;

    /**
     * 根据机构号递归分页查询当前机构及下属机构信息
     *
     * @param instId   多法人标识
     * @param orgType  机构类型
     * @param orgCode  机构号
     * @param pageInfo 分页信息
     * @return 机构信息
     * @throws Exception 异常
     */
    PageResult recursionPageQueryByOrgCode(String instId, String orgType, String orgCode, PageInfo pageInfo) throws Exception;
}
